home *** CD-ROM | disk | FTP | other *** search
- /*
- MacWord2Text
- EvenMore FileIO plugin
- Author: Chris Perver
- Copyright (c) 2001
- */
-
-
- OPT REG=5
-
- LIBRARY 'macword2text.plugin',1,1,'MacWord2Text 1.01' IS em_main, em_end, em_info, em_pluginid, em_begin, em_format
-
- MODULE 'tools/ctype', '*epo'
-
- DEF vers, mem2, len2, startchar, endchar
-
-
- PROC em_isdatatype(memadr, lenadr)
- DEF vers = 0
- DEF w:PTR TO LONG
-
-
- -> Check for FORM header
-
- w := Long(memadr + 65)
-
- SELECT w
- CASE "WDBN"
- vers := 1
- startchar := $ca
- endchar := $0c
- CASE "W6BN"
- vers := 2
- startchar := $ca
- endchar := $00
- /* CASE "TEXT"
- vers := 3
- startchar := $0d
- endchar := $11 */
- ENDSELECT
-
- IF vers > 0
- w := Long(memadr + 69)
- IF w <> "MSWD" THEN vers := 0
- ELSE
- vers := 0
- ENDIF
- ENDPROC vers
-
-
- PROC em_parsedata(memadr, lenadr)
- DEF count = 0, count2 = 0
- DEF wrapping = 80, notdonewrapping = TRUE, currchar = 0
- DEF notdone = TRUE
- -> Allocate memory for file
- -> IF (mem2 := New(lenadr + 1)) = NIL THEN RETURN -1
- -> mem2[lenadr + 1] := "\n" -> Put safety LF at the end of mem
- -> DEF w:PTR TO LONG
- -> DEF iswtxt = FALSE
-
- DEF c
-
- mem2 := memadr
-
- -> SKIP UNTIL WE GOT SOME TEXT
- WHILE memadr[count] <> startchar DO INC count
- INC count
- -> IF vers < 3 THEN INC count ELSE count := count + 3
-
- WHILE notdone AND (count < lenadr)
- IF (currchar >= wrapping)
- WHILE notdonewrapping
- IF isspace(memadr[count]) = FALSE
- DEC count
- DEC count2
- ELSE
- notdonewrapping := FALSE
- ENDIF
- ENDWHILE
- INC count
-
- currchar := 0
- mem2[count2++] := "\n"
- notdonewrapping := TRUE
- ENDIF
-
- SELECT 256 OF c:=memadr[count]
- CASE "\b"
- mem2[count2++] := memadr[count++]
- currchar := 0
- DEFAULT
- IF c = endchar
- DEC count2
- notdone := FALSE
- ELSE
- mem2[count2++] := memadr[count++]
- INC currchar
- ENDIF
- ENDSELECT
-
-
- ENDWHILE
-
-
- mem2[count2] := "\n"
-
- -> IF memadr
- -> Dispose(memadr); memadr := NIL
- -> ENDIF
- ENDPROC mem2, count2
- -><
-
- -> *** STANDARD PROCS FOR PLUGINS
-
-
- PROC em_main(epo:PTR TO em_pluginobj)
- mem2, len2 := em_parsedata(epo.buffer, epo.length)
- epo.buffer := mem2
- epo.length := len2
- RETURN TRUE
- ENDPROC
-
- PROC em_begin(epo:PTR TO em_pluginobj)
- vers := em_isdatatype(epo.buffer, epo.length)
- IF vers
- RETURN TRUE
- ELSE
- RETURN FALSE
- ENDIF
- ENDPROC
-
- PROC em_end() IS EMPTY
-
- PROC em_info() IS 'MacWord2Text 1.01'
-
- PROC em_pluginid() IS "FILE"
-
- PROC em_format() IS 'MacWord'
-
- PROC main() IS EMPTY
-